Actualización de archivos:
# Datos abiertos de Mexico
#download.file('http://datosabiertos.salud.gob.mx/gobmx/salud/datos_abiertos/datos_abiertos_covid19.zip', 'source/dataMx.zip')
#unzip('source/dataMx.zip', exdir = 'source/')Cargar datos:
Volver columna de datos binaria:
# Muertos
rawMxData$FECHA_DEF[rawMxData$FECHA_DEF != '9999-99-99'] <- 0
# Vivos
rawMxData$FECHA_DEF[rawMxData$FECHA_DEF == '9999-99-99'] <- 1
# "No" marcado en base de datos se reemplaza por 0
rawMxData[,21:30] <- apply(rawMxData[,21:30], MARGIN = 2, FUN = function(comorbility){
replace(comorbility, comorbility == 2, 0)})
rawMxData$NEUMONIA[rawMxData$NEUMONIA == 2] <- 0Filtrar por rangos de edad:
# De 0-17
rawMxData$EDAD[rawMxData$EDAD >= 0 & rawMxData$EDAD < 18] <- 1
# De 18-44
rawMxData$EDAD[rawMxData$EDAD >= 18 & rawMxData$EDAD < 45] <- 2
# De 45-59
rawMxData$EDAD[rawMxData$EDAD >= 45 & rawMxData$EDAD < 60] <- 3
# De 60-99
rawMxData$EDAD[rawMxData$EDAD >= 60 & rawMxData$EDAD < 100] <- 4
# Ignorar >99
rawMxData$EDAD[rawMxData$EDAD >= 100] <- 5
# Ignorar centenarios para todos los datos
avoidCentenarians <- rawMxData$EDAD != 5## Limpiar columna de values y agregar columnas para datos necesarios, volver codigo de estado y municipio numericos
df_mxmunicipio_2020$value <- NA
df_mxmunicipio_2020$cases <- NA
df_mxmunicipio_2020$cases_live <- NA
df_mxmunicipio_2020$cases_dead <- NA
df_mxmunicipio_2020$state_code<-as.numeric(df_mxmunicipio_2020$state_code)
df_mxmunicipio_2020$municipio_code <-as.numeric(df_mxmunicipio_2020$municipio_code)# Contar casos por municipio en base de datos
estados <- sort(unique(rawMxData$ENTIDAD_RES))
# recorrer cada estado
for(entidad in estados){
municipios <- sort(unique(rawMxData$MUNICIPIO_RES[rawMxData$ENTIDAD_RES == entidad]))
#recorrer cada municipio y contar los casos
for(municipio in municipios){
if(municipio < 999){
cases <- rawMxData$FECHA_DEF[rawMxData$ENTIDAD_RES == entidad & rawMxData$MUNICIPIO_RES == municipio]
df_mxmunicipio_2020$cases[df_mxmunicipio_2020$state_code == entidad & df_mxmunicipio_2020$municipio_code == municipio] <- length(cases)
df_mxmunicipio_2020$cases_live[df_mxmunicipio_2020$state_code == entidad & df_mxmunicipio_2020$municipio_code == municipio] <- length(cases[cases == 1])
df_mxmunicipio_2020$cases_dead[df_mxmunicipio_2020$state_code == entidad & df_mxmunicipio_2020$municipio_code == municipio] <- length(cases[cases == 0])
#obtener el porcentaje de casos y mortalidad
percentage <- (length(cases)/df_mxmunicipio_2020$pop[df_mxmunicipio_2020$state_code == entidad & df_mxmunicipio_2020$municipio_code == municipio])*100
df_mxmunicipio_2020$value[df_mxmunicipio_2020$state_code == entidad & df_mxmunicipio_2020$municipio_code == municipio] <- percentage }}
}
df_mxmunicipio_2020$value[is.na(df_mxmunicipio_2020$value)] <- 0#desplegar el mapa de mexico que indica con un gradiente el porcentaje de casos
mxmunicipio_choropleth(df_mxmunicipio_2020,
num_colors = 5,
title = "Porcentaje de población infectada con COVID-19",
legend = "%")# ordenar los estados por cantidad de casos
topCases <- head(sort(df_mxmunicipio_2020$value, decreasing = TRUE), 5)# ordena el dataframe de los municipios segun el numero de casos
df_mxmunicipio_2020[order(df_mxmunicipio_2020$value, decreasing = F),]# desplegar el heatmap de la Ciudad de Mexico
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Ciudad de México")$region,
title = "Porcentaje de poblacion infectada por municipio en CDMX",
show_states = FALSE,
legend = "%")#desplegar el heatmap de Coahuila
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Coahuila")$region,
title = "Porcentaje de poblacion infectada por municipio en Coahuila",
show_states = FALSE,
legend = "%")#desplegar heatmap de Baja California Sur
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Baja California Sur")$region,
title = "Porcentaje de poblacion infectada por municipio en B.C. Sur",
show_states = FALSE,
legend = "%")#desplegar heatmap del Estado de Mexico
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"México")$region,
title = "Porcentaje de poblacion infectada por municipio en el Estado de México",
show_states = FALSE,
legend = "%")# desplegar el heatmap de Yucatan
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Yucatán")$region,
title = "Porcentaje de poblacion infectada por municipio en Yucatán",
show_states = FALSE,
legend = "%")# Porcentaje de mortalidad
df_mxmunicipio_2020$value <- (df_mxmunicipio_2020$cases_dead/df_mxmunicipio_2020$cases)*100
df_mxmunicipio_2020$value[is.na(df_mxmunicipio_2020$value)] <- 0# desplegar el porcentaje de mortalidad por municipio
mxmunicipio_choropleth(df_mxmunicipio_2020,
num_colors = 5,
title = "Tasa de mortalidad por COVID-19 por municipio",
legend = "%")# Top fatality, ordenar los municipios por aquellos con mayor mortalidad
df_mxmunicipio_2020[order(df_mxmunicipio_2020$value, decreasing = T),]# desplegar mapa de mortalidad de Oaxaca
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Oaxaca")$region,
title = "Tasa de fatalidad por municipio en Oaxaca",
show_states = FALSE,
legend = "%")#desplegar mapa de mortalidad de Veracruz
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Veracruz")$region,
title = "Tasa de fatalidad por municipio en Veracruz",
show_states = FALSE,
legend = "%")# desplegar mapa de mortalidad de chihuahua
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Chihuahua")$region,
title = "Tasa de fatalidad por municipio en Chihuahua",
show_states = FALSE,
legend = "%")#desplegar mapa de mortalidad de puebla
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Puebla")$region,
title = "Tasa de fatalidad por municipio en Puebla",
show_states = FALSE,
legend = "%")#desplegar mapa de mortalidad de michoacan
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
"Michoacán")$region,
title = "Tasa de fatalidad por municipio en Michoacán",
show_states = FALSE,
legend = "%")# desplegar mapa de toda la republica con gradiente
mxmunicipio_choropleth(df_mxmunicipio_2020,
num_colors = 5,
title = "Porcentaje de población infectada con COVID-19",
legend = "%")# desplegar porcentaje de poblacion en el valle de mexico
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, metro_area %in%
"Valle de México")$region,
title = "Porcentaje de poblacion por municipio en Valle de México",
show_states = FALSE,
legend = "%")# desplegar la poblacion infectada en los 3 estados de los que somos
mxmunicipio_choropleth(df_mxmunicipio_2020, num_colors = 1,
zoom = subset(df_mxmunicipio_2020, state_name %in%
c("Jalisco", "Morelos", "Hidalgo"))$region,
title = "Porcentaje de poblacion infectada por municipio en Jalisco, Hidalgo y Morelos",
show_states = FALSE,
legend = "%")Función por enfermedad:
# FUNCION PARA GENERAR MATRIZ CON COMORBILIDADES
coMor <- function(comorbiditiesList, avoidCentenarians){
# Columna del tamaño de pacientes no centenarios
comorbidities <- data.frame('ID' = rawMxData$ID_REGISTRO[avoidCentenarians])
comorbidities$SOBREVIVENCIA <- as.numeric(rawMxData$FECHA_DEF[avoidCentenarians])
comorbidities$EDAD <- rawMxData$EDAD[avoidCentenarians]
comorbidities$ENTIDAD <- rawMxData$ENTIDAD_RES[avoidCentenarians]
comorbidities$MUNICIPIO <- rawMxData$MUNICIPIO_RES[avoidCentenarians]
#generar matriz de comorbilidades con los datos como 1 y 0
comorbiditiesAux <- sapply(comorbiditiesList, function(comorbidiy){rawMxData[[comorbidiy]]})
comorbidities <- cbind(comorbidities, comorbiditiesAux)
allDates <- apply(comorbidities[,6:length(comorbidities[1,])], MARGIN = 1, FUN = function(paciente){
bools <- paciente <= 1
if(all(bools)){
return(TRUE)
}else{
return(FALSE)
}
})
return(comorbidities[allDates,])
}#generar la matriz con los datos de las comorbilidades indicadas
coFrame <- coMor(c('NEUMONIA','OBESIDAD', 'DIABETES', 'EPOC', 'RENAL_CRONICA', 'ASMA', 'INMUSUPR', 'TABAQUISMO', 'HIPERTENSION'))#glm -> General Linear Model
#utilizar la función glm para llevar a cabo una regresión lineal logistica
reLin <- glm(formula = SOBREVIVENCIA~EDAD+NEUMONIA+OBESIDAD+DIABETES+EPOC+RENAL_CRONICA+ASMA+INMUSUPR+TABAQUISMO+HIPERTENSION, coFrame, family = binomial(link = 'logit'))
summary(reLin)##
## Call:
## glm(formula = SOBREVIVENCIA ~ EDAD + NEUMONIA + OBESIDAD + DIABETES +
## EPOC + RENAL_CRONICA + ASMA + INMUSUPR + TABAQUISMO + HIPERTENSION,
## family = binomial(link = "logit"), data = coFrame)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.6150 0.1064 0.1064 0.1828 2.0638
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 7.345354 0.013122 559.762 < 2e-16 ***
## EDAD -1.087374 0.003970 -273.926 < 2e-16 ***
## NEUMONIA -2.793186 0.005794 -482.117 < 2e-16 ***
## OBESIDAD -0.226378 0.007242 -31.259 < 2e-16 ***
## DIABETES -0.373791 0.006644 -56.259 < 2e-16 ***
## EPOC -0.156497 0.015043 -10.403 < 2e-16 ***
## RENAL_CRONICA -0.791623 0.012914 -61.298 < 2e-16 ***
## ASMA 0.274700 0.020482 13.412 < 2e-16 ***
## INMUSUPR -0.395059 0.019050 -20.738 < 2e-16 ***
## TABAQUISMO 0.076592 0.010483 7.306 2.75e-13 ***
## HIPERTENSION -0.262474 0.006541 -40.126 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1513318 on 3964161 degrees of freedom
## Residual deviance: 937797 on 3964151 degrees of freedom
## AIC: 937819
##
## Number of Fisher Scoring iterations: 7
A continuación podemos ver que todas las variable a excepción de la diabetes son significativas por lo que procederemos a interpretar dichos coeficientes
H0: El modelo no es significativo (B =B2=B3=…=Bk) Ha: El modelo si es significativo
Estadistico de prueba
## [1] 575521.2
Valor P del estadistico de Prueba
Valor \(\alpha\) = 0.05
## [1] "Valor P"
## [1] 0
Como alpha es mayor al valor P,se rechaza H0 por Ha ya que podemos deducir que al menos una de las variables de nuestro modelo pueden explicar los datos.
Podemos observar que hay una alta relación entre padecer obesidad y morir si se enferma de covid teniendo 67% mas de probabilidad, ademas se observo que los paciente que padecen de Neumonia poseen 2.8% mas de probabilidad.
Anteriormente descartamos Diabetes debido debido a que no se encontro una relación significante que pudieran explicar las muertes.
## (Intercept) EDAD NEUMONIA OBESIDAD DIABETES
## 1.548983e+03 3.371007e-01 6.122587e-02 7.974166e-01 6.881209e-01
## EPOC RENAL_CRONICA ASMA INMUSUPR TABAQUISMO
## 8.551343e-01 4.531086e-01 1.316136e+00 6.736406e-01 1.079601e+00
## HIPERTENSION
## 7.691462e-01
# Paquete necesario para analisis estadistico y realizar modelo predictivo
# install.packages("InformationValue")#añadir columna que indique la probabilidad de supervivencia del paciente asignando un valor predictivo
coFrame$PREDICT <- reLin$fitted.values
coFrame#punto de corte maximiza la clasificación de las observaciones
#el punto de corte sera en base a muertos con respecto a probabilidad para que sea mas acertado
Punto_Corte <- optimalCutoff(coFrame$SOBREVIVENCIA,coFrame$PREDICT,optimiseFor = "Both")
Punto_Corte## [1] 0.968654
#indica que porcentaje de las observaciones se clasifico correctamente
Obs_correctas <- 1-misClassError(coFrame$SOBREVIVENCIA,coFrame$PREDICT,threshold = Punto_Corte)
#esta matriz indicara como estan clasificadas las observaciones en los cuadrantes
sensMatrix <- confusionMatrix(coFrame$SOBREVIVENCIA,coFrame$PREDICT,threshold = Punto_Corte)
# 1-1 -> Pacientes que el modelo predijo que no moririan y no murieron
# 1-0 -> Pacientes que el modelo predijo que no moririan y murieron
# 0-1 -> Pacientes que el modelo predijo que moririan y no murieron
# 0-0 -> Pacientes que el modelo predijo que moriria y murieron## [1] 0.8308
# INTERCEPTOS
library(RColorBrewer)
# obtener los coeficientes del estadistico con la relacion de las comorbilidades
intercepts <- exp(coefficients(reLin))
# grafico de barras que exprese la relación de cada comorbilidad
barplot(intercepts[2:11], ylim = c(0,2), col = brewer.pal(10, name = "Set3"), main = 'Correlación con la supervivencia', font = 2, cex.names = 0.4); abline(h=1, lty=2, lwd = 2, col="red"); text(0.1,0.5, label = 'Negativo', col = 'red', adj = c(0, -.1), font = 4); text(0.1,1.8, label = 'Positivo', col ='red', adj = c(0, -.1), font = 4);text(0.7,0.2, '0.33', cex = 0.8); text(1.85,0.15, '0.061', cex = 0.8); text(3.1,0.7, '0.79', cex = 0.8); text(4.3,0.6, '0.68', cex = 0.8); text(5.5, 0.7, '0.85', cex = 0.8); text(6.75, 0.3, '0.45', cex = 0.8); text(7.9, 1.2, '1.31', cex = 0.8); text(9.1,0.5, '0.67', cex = 0.8); text(10.3, 0.9, '1.07', cex = 0.8); text(11.5, 0.6, '0.76', cex = 0.8)Podemos observar que el modelo muestra una gran correlación entre bajas tasas de supervivencia y las enfermedades de neumonia, renal cronica y diabetes. Por otro lado podemos ver una correlación positiva con el asma ya que presentan altas tasas de supervivencia.
Otro de los aspectos que cabe destacar es que el modelo encontro una fuerte correlación entre la edad y la mortalidad, es decir mayor edad representa mas probabilidades de morir si se padece de la enfermedad.
## (Intercept) EDAD NEUMONIA OBESIDAD DIABETES
## 1.548983e+03 3.371007e-01 6.122587e-02 7.974166e-01 6.881209e-01
## EPOC RENAL_CRONICA ASMA INMUSUPR TABAQUISMO
## 8.551343e-01 4.531086e-01 1.316136e+00 6.736406e-01 1.079601e+00
## HIPERTENSION
## 7.691462e-01
# Pie porcentajes de comorbilidades
# obtener la cantidad de pacientes vivos y muertos por comorbilidad
comobiditiesList <- c('OBESIDAD', 'DIABETES', 'NEUMONIA', 'TABAQUISMO')
numIndividuals <- length(coFrame$SOBREVIVENCIA)
labs <- c('Muertos', 'Vivos')
color <- brewer.pal(3, name = "Paired")
deadsPerComorbidity <- sapply(comobiditiesList, function(co){
deadsPerComorb <- coFrame[[co]][coFrame$SOBREVIVENCIA == 0 & coFrame[[co]] == 1]
return(length(deadsPerComorb))
})
alivePerComorbidity <- sapply(comobiditiesList, function(co){
alivePerComorb <- coFrame[[co]][coFrame$SOBREVIVENCIA == 1 & coFrame[[co]] == 1]
return(length(alivePerComorb))
})
# funcion para calcular el porcentaje de vivos y muertos por comorbilidad
percentageCalculator <- function(x, aliveOrDeadVector){
percentage <- round((aliveOrDeadVector[x]/(deadsPerComorbidity[x]+alivePerComorbidity[x]))*100, 2)
return(percentage)
}
# Calculo de porcentajes para las etiquetas
deadsPercentages <- percentageCalculator(1:4, deadsPerComorbidity)
alivePercentages <- percentageCalculator(1:4, alivePerComorbidity)
#Componer los identificadores con porcentaje
labs <-c(deadsPercentages,alivePercentages)
labs <- paste(labs,"%",sep="")
labs <- sapply(1:4, function(x){
labsMatrix <- labs[seq(x,length(labs),4)]
return(labsMatrix)
})
# graficos pie con la tasa de mortalidad por comorbilidad
# graficos de obesidad,diabetes, neumonia y tabaquismo
layout(matrix(c(1,2,3,4), nrow=2, byrow=TRUE))
pie(c(deadsPerComorbidity[1], alivePerComorbidity[1]), labels =labs[,1], main = 'Mortalidad por obesidad', col = color, radius =1)
pie(c(deadsPerComorbidity[2], alivePerComorbidity[2]), labels = labs[,2], main = 'Mortalidad por diabetes', col = color, radius = 1)
pie(c(deadsPerComorbidity[3], alivePerComorbidity[3]), labels = labs[,3], main = 'Mortalidad por neumonia', col = color, radius = 1)
pie(c(deadsPerComorbidity[4], alivePerComorbidity[4]), labels = labs[,4], main = 'Mortalidad por tabaquismo', col = color, radius = 1)
legend('bottomright', c('Muertos','Vivos'),fill=color, bty = 'n')# obtener el porcentaje de vivos y muertos con asma,hipertension, enfermedad renal cronica e inmunosupresion
comobiditiesList <- c('ASMA', 'HIPERTENSION', 'RENAL_CRONICA', 'INMUSUPR')
numIndividuals <- length(coFrame$SOBREVIVENCIA)
labs <- c('Muertos', 'Vivos')
color <- brewer.pal(3, name = "Paired")
deadsPerComorbidity <- sapply(comobiditiesList, function(co){
deadsPerComorb <- coFrame[[co]][coFrame$SOBREVIVENCIA == 0 & coFrame[[co]] == 1]
return(length(deadsPerComorb))
})
alivePerComorbidity <- sapply(comobiditiesList, function(co){
alivePerComorb <- coFrame[[co]][coFrame$SOBREVIVENCIA == 1 & coFrame[[co]] == 1]
return(length(alivePerComorb))
})
percentageCalculator <- function(x, aliveOrDeadVector){
percentage <- round((aliveOrDeadVector[x]/(deadsPerComorbidity[x]+alivePerComorbidity[x]))*100, 2)
return(percentage)
}
# Calculo de porcentajes para las etiquetas
deadsPercentages <- percentageCalculator(1:4, deadsPerComorbidity)
alivePercentages <- percentageCalculator(1:4, alivePerComorbidity)
#Componer los identificadores con porcentaje
labs <-c(deadsPercentages,alivePercentages)
labs <- paste(labs,"%",sep="")
labs <- sapply(1:4, function(x){
labsMatrix <- labs[seq(x,length(labs),4)]
return(labsMatrix)
})
layout(matrix(c(1,2,3,4), nrow=2, byrow=TRUE))
# graficos con tasa de mortalidad para asma,hipertension, enfermedad renal cronica e inmunosupresion
pie(c(deadsPerComorbidity[1], alivePerComorbidity[1]), labels =labs[,1], main = 'Mortalidad por asma', col = color, radius =1)
pie(c(deadsPerComorbidity[2], alivePerComorbidity[2]), labels = labs[,2], main = 'Mortalidad por hipertensión', col = color, radius = 1)
pie(c(deadsPerComorbidity[3], alivePerComorbidity[3]), labels = labs[,3], main = 'Mortalidad por enfermedad renal crónica', col = color, radius = 1)
pie(c(deadsPerComorbidity[4], alivePerComorbidity[4]), labels = labs[,4], main = 'Mortalidad por inmunosupresión', col = color, radius = 1)
legend('bottomright', c('Muertos','Vivos'),fill=color, bty = 'n')Los graficos pie reflejan que efectivamente podemos ver una gran mortalidad en los pacientes que padecen neumonia, enfermedad renal crónica y diabetes, por otro lado el modelo también predijo correctamente la baja mortalidad en pacientes con asma.
# Grafico de densidad que muestre la clasificación de vivos y muertos de acuerdo a su valor predictivo
colores <- brewer.pal(4, name = "Set3")
#obtenemos los valores predictivos de vivos y muertos
sensitivityData <- list(Vivos = coFrame$PREDICT[coFrame$SOBREVIVENCIA== 1], Muertos = coFrame$PREDICT[coFrame$SOBREVIVENCIA == 0])
#obtenemos la función densidad de vivos y muertos
densMuertos <- density(round(sensitivityData$Muertos,1))
densVivos <- density(round(sensitivityData$Vivos,1))
mi.rojo <- rgb(1, 0, 0, 0.3)
mi.verde <- rgb(0, 1, 0, 0.3)
# graficamos ambas densidades
plot(densMuertos, col=colores[1], xlim = c(0.3, 1.05),ylim=c(0,100), main = 'Sensibilidad y especificidad', xlab = 'Valor predictivo', ylab='Frecuencia')
lines(densVivos, col=colores[2])
# rellenamos el espacio bajo las densidades
polygon(densMuertos, col=mi.rojo, border='#d73027')
polygon(densVivos, col=mi.verde, border='#4d9221')
# establecemos una linea que indique el punto de corte y delimite las 2 categorias de la predicción
abline(v = 0.93, col= '#3288bd', lwd = 2, lty = 2)
text(0.8, 95, 'Predicción\nmuertos', cex = 0.9, font = 3)
text(1, 95, 'Predicción\nvivos', cex = 0.9, font= 3)
legend('topleft',c('Muertos','Vivos','Punto de corte'),fill=c('#d73027','#4d9221', '#3288bd'))Observamos que el modelo de regresión logística realizado es muy robusto para predecir a los sobrevivientes
# obtenemos los Porcentajes de sensibilidad y especificidad del modelo
total <- sum(sensMatrix)
muertosMuertos <- round((sensMatrix[1,1]/total)*100)
vivosMuertos <- round((sensMatrix[2,1]/total)*100)
muertosVivos <- round((sensMatrix[1,2]/total)*100)
vivosVivos <- round((sensMatrix[2,2]/total)*100)
# generamos las etiquetas para el pie
labs <- c(muertosMuertos, muertosVivos, vivosMuertos, vivosVivos)
labs <- paste(labs, '%', sep='')# Graficamos el pie de sensibilidad y especificidad
pie(c(sensMatrix[1,1], sensMatrix[1,2], sensMatrix[2,1], sensMatrix[2,2]), labels =labs, main = 'Sensibilidad y especificidad', col = colores, radius =1)
legend('bottomright', c('Verdaderos negativo', 'Falso negativo', 'Falso positivo', 'Verdadero postivo'), fill = colores)Notamos una alta efectividad del modelo con alrededor del 83% de los casos diagnosticados correctamente